package dao;

import static org.junit.Assert.*;

import java.sql.SQLException;
import java.util.ArrayList;

import modele.Formation;

import org.junit.Test;

public class TestFormationDAO extends AgriotesDbTestCase {

	@Test
	public void testInserer() throws SQLException {

		Formation f = new Formation("CD1234", "BTS SIO", "Objectif developpement", "Contenu sur l'Agora", "Bac + 2",
				"Être passione de l'informatique");

		Formation f2 = null;

		FormationDAO.inserer(f);

		f2 = FormationDAO.lireParId(f.getIdFormation());

		assertTrue("Objet n'est pas identique ", f.equals(f2));

	}

	@Test
	public void testModifier() throws SQLException {

		Formation f = new Formation("CD1234", "BTS SIO", "Objectif developpement", "Contenu sur l'Agora", "Bac + 2",
				"Être passione de l'informatique");

		Formation f2 = null;

		FormationDAO.inserer(f);

		f.setTitre("changer le titre");
		f.setPrerequis("changer le pre-requis");

		FormationDAO.modifier(f);

		f2 = FormationDAO.lireParId(f.getIdFormation());

		assertTrue("Objet n'est pas identique ", f.equals(f2));

	}

	@Test
	public void testSupprimer() throws SQLException {

		Formation f = new Formation("CD1234", "BTS SIO", "Objectif developpement", "Contenu sur l'Agora", "Bac + 2",
				"Être passione de l'informatique");

		FormationDAO.inserer(f);

		FormationDAO.supprimer(f.getIdFormation());

		assertNull("Objet existe encore", FormationDAO.lireParId(f.getIdFormation()));
	}

	@Test
	public void testLireParCode() throws SQLException {

		Formation f = new Formation("CD1234", "BTS SIO", "Objectif developpement", "Contenu sur l'Agora", "Bac + 2",
				"Être passione de l'informatique");

		Formation f2 = null;

		FormationDAO.inserer(f);

		f2 = FormationDAO.lireParCode(f.getCode());

		assertTrue("Objet n'est pas identique ", f.equals(f2));

	}

	@Test
	public void testRechercheSingle() throws SQLException {

		Formation formationLocal = new Formation("CD1234", "BTS SIO SISR", "Objectif developpement", "Contenu sur l'Agora", "Bac + 2",
				"Être passione de l'informatique");

		FormationDAO.inserer(formationLocal);

		ArrayList<Formation> listeDB = FormationDAO.rechercheMulti("BTS SIO");

		if (listeDB.size() == 0) {
			fail("La recherche n'a trouve rien");
		}

		for (int i = 0; i < listeDB.size(); i++) {

			Formation formationDB = listeDB.get(i);

			System.out.println(formationDB);

			assertTrue("Objet n'est pas identique ", formationLocal.equals(formationDB));

		}

	}

	@Test
	public void testRechercheMulti() throws SQLException {

		Formation f = new Formation("AU653", "BTS SIO SISR", "Objectif developpement", "Contenu sur l'Agora", "Bac + 2",
				"Être passione de l'informatique, Aimer");

		Formation f2 = new Formation("AU654", "BTS SIO SLAM", "Objectif developpement", "Scrum", "Bac + 2 BTS", "Aimer la programmation");

		ArrayList<Formation> listeLocal = new ArrayList<Formation>();
		listeLocal.add(f);
		listeLocal.add(f2);

		for (Formation formation : listeLocal) {

			FormationDAO.inserer(formation);
		}

		ArrayList<Formation> listeDB = FormationDAO.rechercheMulti("Aimer");

		if (listeDB.size() != listeLocal.size()) {
			fail("Le grandeur des listes n'est pas meme.");
		}

		for (int i = 0; i < listeDB.size(); i++) {
			Formation formationLocal = listeLocal.get(i);
			Formation formationDB = listeDB.get(i);

			assertTrue("Objet n'est pas identique ", formationLocal.equals(formationDB));

		}

	}

}